package com.lazily.interface_;


/**
 * @Author: GZQ
 * @date: 2025/2/11 22:15
 * @description: 实现接口 和 继承
 */

public class ExtendsVsInterface {
	// 程序入口
	public static void main(String[] args) {
		LittleMonkey wukong = new LittleMonkey("悟空");
		wukong.climb();
		wukong.swimming();
		wukong.fly();
	}
}


// 猴子
class Monkey {
	private String name;

	public Monkey(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}


	public void climb() {
		System.out.println(name + "会爬树...");
	}
}

// 接口
interface Fish {
	void swimming();
}

interface Bird {
	void fly();
}

// LittleMonkey 继承了 Monkey
// 小结：
/*
	当子类继承了父类, 就自动的拥有父类的功能
	如果子类需要扩展功能, 可以通过实现接口的方式来扩展。
	可以理解成 实现接口 是 对java 单继承机制的一种补充。
*/

class LittleMonkey extends Monkey implements Fish, Bird {

	public LittleMonkey(String name) {
		super(name);
	}

	@Override
	public void swimming() {
		System.out.println(getName() + " 通过学习, 可以像鱼儿一样游泳了...");
	}

	@Override
	public void fly() {
		System.out.println(getName() + " 通过学习, 可以像鸟儿一样飞翔了...");
	}
}


// 实现接口 VS 继承类 总结
/*
* 接口和继承解决问题不同
* 继承的价值主要在于：解决代码的复用性和可维护性。
* 接口的价值主要在于：设计, 设计好各种规范(方法), 让其它类去实现这些方法。 即更加灵活
*
* 接口比继承更加灵活
* 接口比继承更加灵活, 继承是满足is - a的关系, 而接口只是满足like - a的关系。
* 接口在一定程度上实现代码的解耦合。【即：接口规范性 + 动态绑定机制】
* */